// 521 最长特殊序列
// https://leetcode.cn/problems/longest-uncommon-subsequence-i/description/?envType=daily-question&envId=2024-06-16

/**
 * 给你两个字符串 a 和 b，请返回 这两个字符串中 最长的特殊序列  的长度。如果不存在，则返回 -1 。

「最长特殊序列」 定义如下：该序列为 某字符串独有的最长
子序列
（即不能是其他字符串的子序列） 。

字符串 s 的子序列是在从 s 中删除任意数量的字符后可以获得的字符串。

例如，"abc" 是 "aebdc" 的子序列，因为删除 "aebdc" 中斜体加粗的字符可以得到 "abc" 。 "aebdc" 的子序列还包括 "aebdc" 、 "aeb" 和 "" (空字符串)。
 

示例 1：

输入: a = "aba", b = "cdc"
输出: 3
解释: 最长特殊序列可为 "aba" (或 "cdc")，两者均为自身的子序列且不是对方的子序列。
示例 2：

输入：a = "aaa", b = "bbb"
输出：3
解释: 最长特殊序列是 "aaa" 和 "bbb" 。
示例 3：

输入：a = "aaa", b = "aaa"
输出：-1
解释: 字符串 a 的每个子序列也是字符串 b 的每个子序列。同样，字符串 b 的每个子序列也是字符串 a 的子序列。
 

提示：

1 <= a.length, b.length <= 100
a 和 b 由小写英文字母组成
 */

/**
 * @param {string} a
 * @param {string} b
 * @return {number}
 */
var findLUSlength = function (a, b) {
    /**
     * 思路
     * 如果a,b字符串长度不相等，那最长子序列一定是长的那个字符串的最大长度
     * 为了得到最长的，不重复的子序列:
     * 1. 如果两个字符串长度不相等，a.len > b.len,那最长子序列一定是a的长度，因为b构建不出a
     * 2. 即使两个字符串长度相等，a.len = b.len
     *  如果a.val = b.val，直接返回-1，因为a的任何子串，bdou可以构建出来
     *  如果a.val != b.val, 返回a.len即可
     *
     * 这题虽然问的是子串，但其实只要比较a和b的整体长度和值即可
     */

    const lenA = a.length;
    const lenB = b.length;

    if (lenA != lenB) {
        return Math.max(lenA, lenB);
    }

    return a === b ? -1 : a.length;
};

var test = function (a, b) {
    const result = findLUSlength(a, b);

    console.log(`${a} ${b} is ${result}`);
};

test('aba', 'cdc'); // 3
test('aaa', 'bbb'); // 3
test('aaa', 'aaa'); // -1
test('baaa', 'aaa'); // 4
test('abc', 'cba'); // 3
test('abc', 'cab'); // 3
test('aefawfawfawfaw', 'aefawfeawfwafwaef'); // 17
test('horbxeemlgqpqbujbdagizcfairalg', 'iwvtgyojrfhyzgyzeikqagpfjoaeen'); // 30
